//
// Created by francklinson on 2021/6/19.
//

//给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
//
//美式键盘 中：
//
//第一行由字符 "qwertyuiop" 组成。
//第二行由字符 "asdfghjkl" 组成。
//第三行由字符 "zxcvbnm" 组成。
//
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/keyboard-row
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
#include <string>
#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<string> findWords(vector<string> &words) {
        vector<string> ans; // 返回的结果数组
        string line1 = "qwertyuiopQWERTYUIOP", line2 = "asdfghjklASDFGHJKL", line3 = "zxcvbnmZXCVBNM";
        for (auto &word:words) {
            int n1 = 0, n2 = 0, n3 = 0;
            auto len = word.length();
            for (auto ch:word) { // 判断是否全在一行
                if (line1.find(ch) != string::npos) {
                    if (n2 == 0 and n3 == 0)
                        ++n1;
                    else
                        break;
                }
                if (line2.find(ch) != string::npos) {
                    if (n1 == 0 and n3 == 0)
                        ++n2;
                    else
                        break;
                }
                if (line3.find(ch) != string::npos) {
                    if (n1 == 0 and n2 == 0)
                        ++n3;
                    else
                        break;
                }
            }
            if (n1 == len or n2 == len or n3 == len)
                ans.push_back(word);
        }
        return ans;
    }
};

int main() {
    vector<string> words{"Hello", "Alaska", "Dad", "Peace"};
    Solution sol;
    auto ans = sol.findWords(words);
    for (auto &x:ans) cout << x << endl;
    return 0;
}